<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .box {
        width: 100px;
        height: 100px;
        border-radius: 10px;
        background: lightblue;
      }
      .active {
        background: red;
        color: gold;
      }
      .box span {
        font-size: 25px;
      }
      .city-box .header {
        display: flex;
      }
      .city-box .header .header-span {
        margin: 10px;
        padding: 10px;
        display: flex;
        justify-content: center;
        align-items: center;
        background: lightcoral;
        border-radius: 5px;
        color: #fff;
      }
      .city-box .header .active {
        background: red;
        color: gold;
      }
    </style>
  </head>
  <body>
    <!-- vue生效的代码区域 -->
    <div id="app">
      {{obj.title}}
      <!-- 模版 -->
      <!-- 指令 v-on 绑定监听事件 v-on:click v-on:scroll v-on:mouseover -->
      <h1 v-on:click="handleClick">{{msg}}</h1>
      <button @click="handleBtnClick">按钮-2002A</button>
      <hr />
      <h1>v-bind: 动态数据绑定指令</h1>
      <img style="width: 100px; height: 100px" v-bind:src="src" />

      <h1>动态绑定class类</h1>
      {{isActive}}
      <div class="box" v-bind:class="isActive ? 'active' : ''">
        <span @click="handleTabClick">我是内部的字体</span>
      </div>
      <h1>循环指令v-for</h1>
      <hr />

      <h2 v-for="(item, index) in arr">{{index}}:{{item}}</h2>
      <hr />
      <div class="city-box">
        <header class="header">
          <!-- 
            tabIndex === 0 
            1 === 1 
            2===2
          -->
          tabIndex: {{tabIndex}}
          <span
            class="header-span"
            v-bind:class="tabIndex === index ? 'active': ''"
            v-for="(item, index) in cityArr"
            @click="handleCityClick(index)"
          >
            {{index}} : {{item.provice}}
          </span>
        </header>
        <section class="content">
          {{cityArr[tabIndex].children}}
          <ul v-for="item in cityArr[tabIndex].children">
            <li>{{item.city}}</li>
          </ul>
        </section>
      </div>
    </div>
    <!-- <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> -->
    <script src="./node_modules/vue/dist/vue.js"></script>
    <script src="./node_modules/mockjs/dist/mock.js"></script>
    <script>
      const data = Mock.mock({
        'list|10': [
          {
            id: '@id',
            provice: '@province()',
            'children|5': [
              {
                id: '@id()',
                city: '@city()',
              },
            ],
          },
        ],
      })

      // 1. 简洁的模板语法来声明式地将数据渲染进 DOM 的系统：{{}} 模版
      // 2. vue所有的数据，必须定义在data中或者vue指定的其他区域
      // 3. 通过改变数据，来实现效果的改变 （数据驱动dom）
      // 4. mvvm ->
      const app = new Vue({
        el: '#app', // 挂载让vue生效的元素
        data: {
          msg: 'hello 2002A的小伙伴，大家好，我是vue！',
          src: 'https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF',
          obj: {
            title: '我是标题',
          },
          opt: {
            page: 1,
            size: 10,
          },
          isActive: true,
          arr: ['2001A', '2002A', '2003A'],
          cityArr: [],
          tabIndex: 0,
        },
        // 放置方法的地方
        methods: {
          // tab切换功能
          handleCityClick(index) {
            // 0 1 2
            this.tabIndex = index
          },

          handleTabClick() {
            this.isActive = !this.isActive
          },

          handleClick() {
            // 响应式
            // 凡是在data中的数据，都可以用this直接访问到
            console.log('handleClick')
            console.log('响应式数据:', this.obj)
            this.myobj = {
              title: '我是myobj的title',
            }
            console.log(this.myobj, '2002')

            this.msg = this.msg.split('').reverse().join('')
          },
          handleBtnClick() {
            console.log('btn-click')
          },
        },
      })

      // 响应式效果 借助了一个设计模式： MVVM
      // M-model 数据模型
      // v-view  视图模型
      // vm -> view-model 处理视图和数据的一个中介

      /*
      get title: ƒ reactiveGetter()
      set title: ƒ reactiveSetter(newVal)
        正是因为这个数据上面，经过data加工之后，添加了 两个属性，get/set 所以，这个数据就能变成了一个
      响应式数据，
      1. 前提，必须定义在data中
      */

      // console.log('data:', data.list)
      // const obj = {
      //   title: '我是标题',
      // }
      // console.log('obj非响应式数据：', obj)

      // console.log(app, 'app')
    </script>
  </body>
</html>
